package br.com.sig.cadastro.cliente.presentation.action;

import javax.annotation.PostConstruct;
import javax.faces.bean.ViewScoped;
import javax.inject.Inject;
import javax.inject.Named;

import br.com.sig.business.exception.BaseException;
import br.com.sig.cadastro.business.model.entity.AtividadeComercial;
import br.com.sig.cadastro.cliente.business.model.bo.ClienteBO;
import br.com.sig.cadastro.cliente.business.model.entity.Cliente;
import br.com.sig.cadastro.pessoas.business.model.entity.Pessoa;
import br.com.sig.cadastro.pessoas.business.model.entity.PessoaFisica;
import br.com.sig.cadastro.pessoas.business.model.entity.PessoaJuridica;
import br.com.sig.cadastro.pessoas.business.model.enumeration.TipoPessoa;
import br.com.sig.cadastro.recursoshumanos.business.model.entity.Funcionario;
import br.com.sig.presentation.action.BaseAction;

@Named
@ViewScoped
public class ClienteAction extends BaseAction<Cliente> {

	private static final long serialVersionUID = 5340887695967298329L;
	
	private TipoPessoa tipoPessoa;
	
	private AtividadeComercial atividadeComercial;
	
	@Inject
	private ClienteBO clienteBO;

	@PostConstruct
	public void init() {
		setService(clienteBO);
		this.tipoPessoa = null;
		this.atividadeComercial = null;
		
		if (instance != null && instance.getPessoa() != null && instance.getPessoa().getTipo() != null) {
			setTipoPessoa(instance.getPessoa().getTipo());
		}		
	}
	
	@Override
	protected Cliente createInstance() {
		Cliente cliente = super.createInstance();
		cliente.setPessoa(new Pessoa());
		cliente.setResponsavel(new Funcionario());
		return cliente;
	}
	
	@Override
	public void persist() throws BaseException {
		if(getInstance().getAtividadeComercial().isOutros()) {
			getInstance().setAtividadeComercial(getAtividadeComercial());
		}
		super.persist();
	}
	
	@Override
	public void update() {
		if(getInstance().getAtividadeComercial().isOutros()) {
			getInstance().setAtividadeComercial(getAtividadeComercial());
		}
		super.update();
	}
	
	public boolean hasPessoa() {
		return getInstance().getPessoa().getId() != null;
	}
	
	public TipoPessoa getTipoPessoa() {
		return tipoPessoa;
	}

	public void setTipoPessoa(TipoPessoa tipoPessoa) {
		this.tipoPessoa = tipoPessoa;
		
		if (this.tipoPessoa != null && getInstance().getPessoa().getId() == null) {
			if (TipoPessoa.FISICA.equals(getTipoPessoa())) {
				getInstance().setPessoa(new PessoaFisica());
			} else {
				getInstance().setPessoa(new PessoaJuridica());
			}
		}
	}

	public AtividadeComercial getAtividadeComercial() {
		if (this.atividadeComercial == null) {
			this.atividadeComercial = new AtividadeComercial();
		}
		return atividadeComercial;
	}
	
	public boolean hasAtividadeComercialOutros() {
		return getInstance().getAtividadeComercial() != null && 
				getInstance().getAtividadeComercial().isOutros();		 
	}
}